public class Rectangle extends Shape{
	private Interval width;
	private Interval height;
	
	//Notkun: e = new Rectangle(a,b,c,d)
	//Fyrir: w og h eru jákvæðar tölur
	//Eftir: e er af taginu rectangle og táknar ferhyrningin með hæð d, breidd c og miðpunkt (a,b)
	public Rectangle(double x0, double y0, double w, double h){
		width = new Interval(x0-w/2, x0+w/2);
		height = new Interval(y0-h/2, y0+h/2);
	}
	
	//Notkun: c = a.rintersects(b)
	//Fyrir: ekkert
	//Eftir: c er true ef a sker b, en false annars
	public boolean rintersects(Rectangle b){
		boolean isintersect;
		isintersect = (width.intersects(b.width))&&(height.intersects(b.height));
		return isintersect;
	}
	
	// Notkun: p = s.getCenter()
    // Fyrir:  ekkert
    // Eftir:  p er miðjan á s
    public Point2D getCenter(){
		Point2D p = new Point2D((width.le+width.ri)/2,(height.le+height.ri)/2);
		return p;
	}
	
	// Notkun: r = s.getBoundingBox()
    // Fyrir:  ekkert
    // Eftir:  r er minnsti ferhyrningur sem passar utan um s
    public Rectangle getBoundingBox(){
		return this;
	}
	
	// Notkun: c = s.intersects(o)
    // Fyrir:  ekkert
    // Eftir:  c er true of s og o skarast
    public boolean intersects(Shape o){
		Rectangle r = o.getBoundingBox();
		return rintersects(r);
	}
	
	// Notkun: s.scale(f)
    // Fyrir:  f > 0
    // Eftir:  s er f-sinnum stærra og miðjan er óbreytt
    public void scale(double f){
		setWidth(getWidth()*Math.sqrt(f));
		setHeight(getHeight()*Math.sqrt(f));
	}

	//Notkun: d = a.getWidth()
	//Fyrir: ekkert
	//Eftir: d er breidd a
	public double getWidth(){
		double d = width.ri-width.le;
		return d;
	}
	
	//Notkun: h = a.getHeight()
	//Fyrir: ekkert
	//Eftir: h er hæð a
	public double getHeight(){
		double h = height.ri-height.le;
		return h;
	}
	
	//Notkun: a.setWidth(w)
	//Fyrir: w>0
	//Eftir: a hefur sama miðpunkt og hæð, en breidd w
	public void setWidth(double w){
		width = new Interval((width.ri+width.le-w)/2,(width.ri+width.le+w)/2);
	}
	
	//Notkun: a.setHeight(h)
	//Fyrir: h>0
	//Eftir: a hefur sama miðpunkt og breidd, en hæð h
	public void setHeight(double h){
		height = new Interval((height.ri+height.le-h)/2,(height.ri+height.le+h)/2);
	}
	
}